<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // // 解决传址问题 
        // // 数组 对象
        // var arr1 = [1,2,3,4];
        // // var arr2 = arr;
        // var arr2 = [];
        // // for(var i=0;i<arr1.length;i++){
        // //     arr2.push(arr1[i]);
        // // }
        // for(var key in arr1){
        //     arr2[key] = arr1[key];
        // }

        // console.log(arr2);

        // arr2[1] = 6;
        // console.log(arr1);
        // console.log(arr2);

        // var obj = {
        //     name:"张三",
        //     age:20
        // }

        // var obj2 = {}

        // for(var key in obj){
        //     obj2[key] = obj[key];
        // }

        // obj2.age = 30;
        // console.log(obj);
        // console.log(obj2);



        // 封装一个函数 实现拷贝 数组 或者是对象
        // 拷贝一层

        // function copy(arg){
        //     // 生成一个空的对象或者数组 根据传递过来的obj的类型来生成；
        //     var res = Array.isArray(arg)?[]:{};
        //     // console.log(res);
        //     for(var key in arg){
        //         res[key] = arg[key];
        //     }
        //     // console.log(res);
        //     return res;
        // }
        // // var arr = [1,2,3];
        // // var newarr = copy(arr);
        // // var newarr = arr;
        // // newarr[1] = 6;
        // // console.log(arr);
        // // console.log(newarr);


        // var obj = {
        //     name:"张三",
        //     myhobby:{
        //         a:"篮球",
        //         b:"足球"
        //     }
        // };
        // var obj2 = copy(obj);
        // // obj2.name = "李四";
        // obj2.myhobby.a = "高尔夫";
        // console.log(obj);
        // console.log(obj2);
        // copy(obj);

        //     var arr = [];
        //     var obj = {};
        //     // console.log(typeof arr);
        //     // console.log(typeof obj);
        //    console.log( Array.isArray(obj));

        // 拷贝函数 ----》深拷贝
        /*
        var obj = {
                name:"张三",
                age:20,
                myhobby:{
                    a:"篮球",
                    b:"足球",
                    obj:{
                        obj:{
    
                        }
                    }
                }
            };
        */

        function deepCopy(arg) {
            // 生成一个空的对象或者数组 根据传递过来的obj的类型来生成；
            var res = Array.isArray(arg) ? [] : {};
            // console.log(res);
            for (var key in arg) {
                if (typeof arg[key] === "object") {  // 张三  20  {a:"篮球",b:"足球"};
                    res[key] = deepCopy(arg[key]);
                } else {
                    res[key] = arg[key];
                }
            }
            console.log(res);
            return res;
        }

        var obj = {
            name: "张三",
            myhobby: {
                a: "篮球",
                b: "足球"
            },
            arr: [1, 2, 3, 4]
        };
        // var obj2 = {
        //     name:"张三",
        //     myhobby:{
        //         a:"篮球",
        //         b:"足球"
        //     },
        //     arr:[1,2,3,4]
        // };
        var obj2 = deepCopy(obj);
        obj2.myhobby.a = "高尔夫";
        // console.log(obj);
        // console.log(obj2);

        // 递归深拷贝 
    </script>
</body>

</html>